home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
United Public Domain Gold 2
/
United Public Domain Gold 2.iso
/
music_utilities
/
pt011.dms
/
pt011.adf
/
DevPatch
/
DevPatchII.asm
< prev
next >
Wrap
Assembly Source File
|
1990-03-20
|
4KB
|
170 lines
OPT c+,l-
****************************************
* DevPatch II *
* © J.Tyberghein N.François P.Marivoet *
* Dec 1989 *
****************************************
incdir ":include/"
include "exec/types.i"
include "exec/memory.i"
include "exec/ports.i"
include "exec/exec_lib.i"
;IntuitionBase routines
_LVOOpenWindow equ -204
;DosBase
_LVOOutput equ -60
_LVOWrite equ -48
nw_Title equ $1a
nw_Height equ 6
PRI equ 0
;*** Start code ***
;IntuitionLibrary
lea IntLib(PC),a1
CALLEXEC OldOpenLibrary
move.l d0,_IntBase
;DosLibrary
lea DosLib(PC),a1
CALLEXEC OldOpenLibrary
move.l d0,_DosBase
;Say we exist
lea StartupMsg(PC),a2
moveq #StartupMsgLen,d2
bsr myPuts
;Test if the MsgPort exists
lea StartBlock(PC),a1
lea PortName(a1),a1
CALLEXEC FindPort
tst.l d0
bne.s PortAlreadyExists
;Create MsgPort
move.l #BlockLen,d0
move.l #MEMF_CLEAR+MEMF_PUBLIC,d1
CALLEXEC AllocMem
tst.l d0
beq CloseLib
move.l d0,Port
lea StartBlock(PC),a0
move.l d0,a1
move.l #BlockLen,d0
CALLEXEC CopyMem
move.l Port(PC),a1
lea PortName(a1),a0
move.l a0,LN_NAME(a1)
CALLEXEC AddPort
;Install patch
move.l Port(PC),a1
lea OpenPatch(a1),a0
move.l a0,d0
move.l _IntBase(PC),a1
move.l #_LVOOpenWindow,a0
CALLEXEC SetFunction
move.l Port(PC),a1
move.l d0,JmpLab1(a1)
lea PatchedMsg(PC),a2
moveq #PatchedMsgLen,d2
bsr.s myPuts
bra.s CloseLib
PortAlreadyExists:
move.l d0,a2
;Remove patch
move.l JmpLab1(a2),d0
move.l _IntBase(PC),a1
move.l #_LVOOpenWindow,a0
CALLEXEC SetFunction
;Remove Port
move.l a2,a1
CALLEXEC RemPort
;Free Patch memory
move.l a2,a1
move.l #BlockLen,d0
CALLEXEC FreeMem
;Say it's done
lea RemovedMsg(PC),a2
moveq #RemovedMsgLen,d2
bsr.s myPuts
CloseLib:
;Close libraries
move.l _DosBase(PC),a1
CALLEXEC CloseLibrary
move.l _IntBase(PC),a1
CALLEXEC CloseLibrary
rts
myPuts:
move.l _DosBase(PC),a6
jsr _LVOOutput(a6)
move.l d0,d1
move.l d2,d3
move.l a2,d2
jsr _LVOWrite(a6)
rts
*****************************************************************************
;This is our MsgPort followed by our patch function
;this data and code will be copied in one block
StartBlock:
dc.l 0,0
dc.b NT_MSGPORT,PRI
dc.l 0 ;Pointer to our MsgPort name
dc.b 0,0
dc.l 0,0,0,0
dc.b 0,0
OpenPatch equ *-StartBlock
movem.l d7/a2-a3,-(a7)
move.l nw_Title(a0),a2
lea Assembling(PC),a3
moveq #13,d7
CmpLoop:
cmp.b (a2)+,(a3)+
dbne d7,CmpLoop
addq.w #1,d7
beq.s PatchIt
move.l nw_Title(a0),a2
lea DefaultOutput(PC),a3
moveq #21,d7
CmpLoop2:
cmp.b (a2)+,(a3)+
dbne d7,CmpLoop2
addq.w #1,d7
bne.s NotDevpac
PatchIt:
move.w #45,nw_Height(a0)
NotDevpac:
movem.l (a7)+,d7/a2-a3
JmpLab1 equ *+2-StartBlock
jmp $0.l
PortName equ *-StartBlock
dc.b "DevPatch.port",0
Assembling: dc.b "Assembling...",0
DefaultOutput: dc.b "Default Output Window",0
BlockLen equ *-StartBlock
*****************************************************************************
_IntBase: dc.l 0
_DosBase: dc.l 0
Port: dc.l 0
IntLib: dc.b "intuition.library",0
DosLib: dc.b "dos.library",0
StartupMsg: dc.b 27,"[33mDevPatch II",27,"[0m by PowerPeak",10,0
StartupMsgLen equ *-StartupMsg
PatchedMsg: dc.b "Patch installed.",10,0
PatchedMsgLen equ *-PatchedMsg
RemovedMsg: dc.b "Patch removed.",10,0
RemovedMsgLen equ *-RemovedMsg
END